前面使用的 dotnet run 命令,要了解底層原理,需要先看 dotnet/sdk
原始碼的導覽,由「使用 CLI」過渡到「讀懂 CLI 與建置管線怎麼運作」。先釐清:dotnet
可執行檔本體位於 installer 與 runtime 相關倉庫的產物,但「指令的高階行為(如 build / run / publish / workload)」的大量邏輯集中在 dotnet/sdk
。
角色 | Repository | 主要職責 | 與 sdk 互動 |
---|---|---|---|
編譯器 | dotnet/roslyn |
C# / VB 編譯、語意分析 | SDK 透過 MSBuild Task 呼叫 csc、生成 IL |
執行時 | dotnet/runtime |
BCL、CLR、JIT、ILLink、NativeAOT 工具 | SDK 把屬性傳遞給 crossgen2 、ILLink、打包 host |
ASP.NET | dotnet/aspnetcore |
Kestrel、Minimal APIs、Blazor 等 | SDK 引用其 targeting packs / runtime packs |
安裝器 | dotnet/installer |
打包最終發行之 SDK / Runtime | SDK 產生的組件被彙整打包 |
模板 | dotnet/templating |
dotnet new 模板系統 |
SDK 內夾帶或參考模板資源 |
SDK | dotnet/sdk |
CLI 指令高階流程、MSBuild Targets、工作負載、打包組態 | 本章主角 |
換句話說:sdk
是把「語言、執行時、生態功能」接起來的膠水層。